#include "Statystyki.h"


Statystyki::Statystyki(void)
{
}
Statystyki::Statystyki(list<Zadanie*>* z, int _nrSymulacji, char* _nazwa)
{
    nrSymulacji = _nrSymulacji;
    nazwaSieci = _nazwa;
	zadania = z;
	sredniaDlugoscZadania = 0;
	sredniCzasOczekiwania = 0;
	sredniCzasPrzebywania = 0;
	maxCzasOczekiwania = INT_MIN;
	minCzasPrzebywania = INT_MAX;
	maxCzasPrzebywania = INT_MIN;
	wyniki = new char* [9];
}

Statystyki::~Statystyki(void)
{
    delete [] nazwaSieci;
    for (int i =0; i<9; i++)
        delete [] wyniki[i];
    delete [] wyniki;
}

void Statystyki::wylicz()
{
	int liczbaZadan = zadania->size();
	if (liczbaZadan >0)
	{
    	int _sredniaDlugoscZadania = 0;
    	int _sredniCzasOczekiwania = 0;
    	int _sredniCzasPrzebywania = 0;
    
    	for (list<Zadanie*>::iterator it = zadania->begin(); it!= zadania->end(); ++it)
    	{
    		_sredniaDlugoscZadania += (*it)->getDlugosc();
    		_sredniCzasOczekiwania += (*it)->getCzasOczekiwania();
    		_sredniCzasPrzebywania += (*it)->getCzasPrzebywania();
    
    		if ((*it)->getCzasOczekiwania() > maxCzasOczekiwania) maxCzasOczekiwania = (*it)->getCzasOczekiwania();
    		if ((*it)->getCzasPrzebywania() > maxCzasPrzebywania) maxCzasPrzebywania = (*it)->getCzasPrzebywania();
    		if ((*it)->getCzasPrzebywania() < minCzasPrzebywania) minCzasPrzebywania = (*it)->getCzasPrzebywania();
    	}
    	sredniaDlugoscZadania = (float) _sredniaDlugoscZadania / (float) liczbaZadan;
    	sredniCzasOczekiwania = (float) _sredniCzasOczekiwania / (float) liczbaZadan;
    	sredniCzasPrzebywania = (float) _sredniCzasPrzebywania / (float) liczbaZadan;
    }
    else
    {
        sredniaDlugoscZadania = 0;
        sredniCzasOczekiwania = 0;
        sredniCzasPrzebywania = 0;
        maxCzasOczekiwania = 0;
        maxCzasPrzebywania = 0;
        minCzasPrzebywania = 0 ;  
    }
	wypisz();
}

void Statystyki::wypisz()
{
	 char * buffer = new char[100];
	 sprintf (buffer,  "Liczba zadan: %5d", zadania->size());
	 wyniki[0] = buffer;
	 buffer = new char[100];
	 sprintf (buffer,  "%5d", nrSymulacji);
	 wyniki[1] = buffer;

	 wyniki[2] = nazwaSieci;
	 
	 buffer = new char[100];
	 sprintf (buffer,  "%10.4f", sredniaDlugoscZadania);
	 wyniki[3] = buffer;
	 buffer = new char[100];
	 sprintf (buffer,  "%10.4f", sredniCzasOczekiwania);
	 wyniki[4] = buffer;
	 buffer = new char[100];
	 sprintf (buffer,  "%10.4f", sredniCzasPrzebywania);
	 wyniki[5] = buffer;
	 buffer = new char[100];
	 sprintf (buffer,  "%5d", maxCzasOczekiwania);
	 wyniki[6] = buffer;
	 buffer = new char[100];
	 sprintf (buffer,  "%5d", minCzasPrzebywania);
	 wyniki[7] = buffer;
	 buffer = new char[100];
	 sprintf (buffer,  "%5d", maxCzasPrzebywania);
	 wyniki[8] = buffer;
}
